//package com.gosling.cloudspace.tools;
//
//import com.alibaba.excel.EasyExcelFactory;
//import com.alibaba.excel.ExcelWriter;
//import com.alibaba.excel.context.AnalysisContext;
//import com.alibaba.excel.event.AnalysisEventListener;
//import com.alibaba.excel.metadata.Sheet;
//import lombok.Getter;
//import lombok.Setter;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.*;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.List;
//
//@Slf4j
//public class DecodeTool {
//
//    private static Sheet initSheet;
//
//    static {
//        initSheet = new Sheet(1, 0);
//        initSheet.setSheetName("sheet");
//        //设置自适应宽度
//        initSheet.setAutoWidth(Boolean.TRUE);
//    }
//
//    /**
//     * 读大于1000行数据
//     *
//     * @param file
//     * @return
//     */
//    public static List<Object> readMoreThan1000Row(MultipartFile file) {
//        return readMoreThan1000RowBySheet(file, null);
//    }
//
//    /**
//     * 读大于1000行数据, 带样式
//     *
//     * @param file
//     * @return
//     */
//    public static List<Object> readMoreThan1000RowBySheet(MultipartFile file, Sheet sheet) {
//        sheet = sheet != null ? sheet : initSheet;
//        InputStream fileStream = null;
//        try {
//            fileStream = new BufferedInputStream(file.getInputStream());
////            fileStream = new FileInputStream(filePath);
//            ExcelListener excelListener = new ExcelListener();
//            EasyExcelFactory.readBySax(fileStream, sheet, excelListener);
//            return excelListener.getDatas();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (fileStream != null) {
//                    fileStream.close();
//                }
//            } catch (IOException e) {
//                log.error("excel文件读取失败, 失败原因：{}", e);
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 生成excle
//     *
//     * @param filePath 绝对路径, 如：/home/chenmingjian/Downloads/aaa.xlsx
//     * @param data     数据源
//     * @param head     表头
//     */
//    public static void writeBySimple(String filePath, List<List<Object>> data, List<String> head) {
//        writeSimpleBySheet(filePath, data, head, null);
//    }
//
//    /**
//     * 生成excle
//     *
//     * @param filePath 绝对路径, 如：/home/chenmingjian/Downloads/aaa.xlsx
//     * @param data     数据源
//     * @param sheet    excle页面样式
//     * @param head     表头
//     */
//    public static void writeSimpleBySheet(String filePath, List<List<Object>> data, List<String> head, Sheet sheet) {
//        sheet = (sheet != null) ? sheet : initSheet;
//
//        if (head != null) {
//            List<List<String>> list = new ArrayList<>();
//            head.forEach(h -> list.add(Collections.singletonList(h)));
//            sheet.setHead(list);
//        }
//
//        OutputStream outputStream = null;
//        ExcelWriter writer = null;
//        try {
//            outputStream = new FileOutputStream(filePath);
//            writer = EasyExcelFactory.getWriter(outputStream);
//            writer.write1(data, sheet);
//        } catch (FileNotFoundException e) {
//            log.error("找不到文件或文件路径错误, 文件：{}", filePath);
//        } finally {
//            IOTool.closeQuietly(writer);
//            IOTool.closeQuietly(outputStream);
//        }
//
//    }
//
//    /**
//     * 解析监听器，
//     * 每解析一行会回调invoke()方法。
//     * 整个excel解析结束会执行doAfterAllAnalysed()方法
//     */
//    @Getter
//    @Setter
//    public static class ExcelListener extends AnalysisEventListener {
//
//        private List<Object> datas = new ArrayList<>();
//
//        /**
//         * 逐行解析
//         * object : 当前行的数据
//         */
//        @Override
//        public void invoke(Object object, AnalysisContext context) {
//            //当前行
//            // context.getCurrentRowNum()
//            if (object != null) {
//                datas.add(object);
//            }
//        }
//
//
//        /**
//         * 解析完所有数据后会调用该方法
//         */
//        @Override
//        public void doAfterAllAnalysed(AnalysisContext context) {
//            //解析结束销毁不用的资源
//        }
//
//    }
//
//
//}
//
